// 应用配置类型
export interface AppConfig {
  env: string;
  name: string;
  url: string;
  port: number;
  description: string;
  version: string;
}

// JWT配置类型
export interface JwtConfig {
  app: {
    secret: string;
    expiresIn: string;
    refreshExpiresIn: string;
  };
  admin: {
    secret: string;
    expiresIn: string;
    refreshExpiresIn: string;
  };
}

// MongoDB配置类型
export interface MySQLConfig {
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

// Redis配置类型
export interface RedisConfig {
  host: string;
  port: number;
  password?: string;
}

// Loki配置类型
export interface LokiConfig {
  enabled: boolean;
  host: string;
  basicAuth?: string;
}

// 完整配置类型
export interface ConfigType {
  app: AppConfig;
  jwt: JwtConfig;
  mysql: MySQLConfig;
  redis: RedisConfig;
  loki: LokiConfig;
}

// 配置键类型
export type ConfigKeys = keyof ConfigType;

// 嵌套配置键类型
export type ConfigPath =
  | 'app'
  | 'app.env'
  | 'app.name'
  | 'app.url'
  | 'app.port'
  | 'app.description'
  | 'app.version'
  | 'jwt'
  | 'jwt.app'
  | 'jwt.app.secret'
  | 'jwt.app.expiresIn'
  | 'jwt.admin'
  | 'jwt.admin.secret'
  | 'jwt.admin.expiresIn'
  | 'mysql'
  | 'mysql.host'
  | 'mysql.port'
  | 'mysql.username'
  | 'mysql.password'
  | 'mysql.database'
  | 'redis'
  | 'redis.host'
  | 'redis.port'
  | 'redis.password'
  | 'loki'
  | 'loki.enabled'
  | 'loki.host'
  | 'loki.basicAuth';

// 根据路径获取配置值类型的工具类型
export type GetConfigType<T extends ConfigPath> =
  T extends 'app' ? AppConfig :
  T extends 'app.env' ? string :
  T extends 'app.name' ? string :
  T extends 'app.url' ? string :
  T extends 'app.port' ? number :
  T extends 'app.description' ? string :
  T extends 'app.version' ? string :
  T extends 'jwt' ? JwtConfig :
  T extends 'jwt.app' ? JwtConfig['app'] :
  T extends 'jwt.app.secret' ? string :
  T extends 'jwt.app.expiresIn' ? string :
  T extends 'jwt.admin' ? JwtConfig['admin'] :
  T extends 'jwt.admin.secret' ? string :
  T extends 'jwt.admin.expiresIn' ? string :
  T extends 'mysql' ? MySQLConfig :
  T extends 'mysql.host' ? string :
  T extends 'mysql.port' ? number :
  T extends 'mysql.username' ? string :
  T extends 'mysql.password' ? string :
  T extends 'mysql.database' ? string :
  T extends 'redis' ? RedisConfig :
  T extends 'redis.host' ? string :
  T extends 'redis.port' ? number :
  T extends 'redis.password' ? string | undefined :
  T extends 'loki' ? LokiConfig :
  T extends 'loki.enabled' ? boolean :
  T extends 'loki.host' ? string :
  T extends 'loki.basicAuth' ? string | undefined :
  unknown;
